package com.quadTrees
{
	import flash.utils.*;
	
	/**
	 * 哈希表
	 */
	public class Hash
	{
		
///////////////////////////////////////////////////////////////////////////////////////////////////
// 公共域
///////////////////////////////////////////////////////////////////////////////////////////////////
		
		/**
		 * 构造函数
		 */
		public function Hash()
		{
			this.hash = new Dictionary();
		}
		
		/**
		 * 返回表的长度
		 */
		public function get length() : int
		{
			return this._length;
		}
		
		/**
		 * 放入 键/值 到表中
		 * @param	value 值
		 * @param	key 键
		 */
		public function put(value : Object, key : String) : void
		{
			if (!(this.has(key)))
			{
				this.hash[key] = value;
				this._length++;
			}
		}
		
		/**
		 * 判断是否存在键
		 * @param	key 键
		 * @return 存在返回 true, 否则返回 false
		 */
		public function has(key : String) : Boolean
		{
			if (key == null)
				return false;
			
			if (this.hash[key] != null)
				return true;
			
			return false;
		}
		
		/**
		 * 移出 键/值 配对
		 * @param	key 移出的键
		 * @return 如果移除成功, 则返回 key 对应的 value, 否则返回 null.
		 */
		public function remove(key : String) : Object
		{
			var obj : Object;
			if (this.has(key))
			{
				obj = this.hash[key];
				delete this.hash[key];
				this._length--;
				return obj;
			}
			
			return null;
		}
		
		/**
		 * 卸载, 释放全部资源
		 */
		public function unload() : void
		{
			this.hash = null;
			this._length = 0;
		}
		
		/**
		 * 得到 key 对应的对象
		 * @param	key 键
		 * @return 该 key 对应的对象
		 */
		public function take(key : String) : Object
		{
			return this.hash[key];
		}
		
		/**
		 * 初始化
		 */
		public function init() : void
		{
			this.hash = new Dictionary();
			this._length = 0;
		}
		
		/**
		 * 获得使用的 Dictinary 对象
		 */
		public function get hashMap() : Dictionary
		{
			return this.hash;
		}
		
		/**
		 * 设置使用的 Dictionary 对象
		 */
		public function set hashMap(value : Dictionary) : void
		{
			this.hash = value;
		}
		
		/**
		 * 获得哈希表内的所有值
		 */
		public function get values() : Vector.<Object>
		{
			var i : String;
			var array : Vector.<Object> = new Vector.<Object>();
			for (i in this.hash)
				array.push(this.hash[i]);
			return array;
		}
		
///////////////////////////////////////////////////////////////////////////////////////////////////
// 私有域
///////////////////////////////////////////////////////////////////////////////////////////////////
		
		private var hash		: Dictionary = null;
		private var _length		: int = 0;
	
	}
}


































///////////////////////////////////////////////////////////////////////////////////////////////////
// end file
///////////////////////////////////////////////////////////////////////////////////////////////////


